package exo1;

import exception.CompteFermeException;
import exception.CompteNonTransferableException;
import exception.CreditSurPlafondException;
import exception.DebitNonAutoriseException;
import exception.DebitSousSeuilException;

public class CompteAction extends CompteSansLimite {
	private static final int VERSEMENTMINIMAL = 100;
	private final double plafondOperation;

	public CompteAction(Personne nom, int numero, double solde, double plafond)
			throws IllegalArgumentException {
		super(nom, numero, solde, 3);
		if (solde < VERSEMENTMINIMAL) {
			throw new IllegalArgumentException("Capital trop faible !");
		}
		this.plafondOperation = plafond;
	}

	@Override
	public boolean transferer(Compte compte, double montant)
			throws DebitNonAutoriseException, DebitSousSeuilException,
			CreditSurPlafondException, CompteFermeException,IllegalArgumentException,CompteNonTransferableException {
		if (this.isOuvert() == false || compte.isOuvert() == false) {
			throw new CompteFermeException("Le compte est fermé !");
		}
		if (montant > this.plafondOperation) {
			throw new IllegalArgumentException("Montant trop haut !");
		}
		if(this.getType() == 3){
			throw new CompteNonTransferableException("");
		}
		double capital = this.getSolde() - montant;
		if(capital < VERSEMENTMINIMAL) {
			throw new DebitSousSeuilException("En dessous du seuil !");
		}
		this.setSolde(capital);
		compte.crediter(montant);
		return true;
	}

	@Override
	public boolean debiter(double montant) throws DebitNonAutoriseException,
			DebitSousSeuilException, CompteFermeException {
		if (this.isOuvert() == false) {
			throw new CompteFermeException("Le compte est fermé !");
		}
		this.setSolde(0);
		this.setOuvert(false);
		System.out.println("Compte fermé !");
		return true;
	}

	@Override
	public boolean crediter(double montant) throws CreditSurPlafondException,
			CompteFermeException, IllegalArgumentException {
		if (this.isOuvert() == false) {
			throw new CompteFermeException("Le compte est fermé !");
		}
		if (montant > this.plafondOperation) {
			throw new IllegalArgumentException("Montant trop haut !");
		}
		double capital = this.getSolde() + montant;
		this.setSolde(capital);
		return true;
	}

}
